<?php

namespace app\adminapi\service;

use app\adminapi\model\sysfile\SysFileCateDO;
use app\adminapi\model\sysfile\SysFileDO;
use app\common\exception\OtherException;

class SysFileCateService
{
    public function list(array $param)
    {
        $where = [];
        if (isset($param['type'])) {
            $where[] = ['type', '=', $param['type']];
        }
        $paginate['list_rows'] = $param['pageSize'];
        if (isset($param['pageNo'])) {
            $paginate['page'] = $param['pageNo'];
        }
        $result = (new SysFileCateDO())
            ->where($where)
            ->paginate($paginate)
            ->toArray();
        return [
            'total' => $result['total'],
            'list' => $result['data']
        ];
    }

    public function addSysFileCate(array $sysFileCateDO)
    {
        return SysFileCateDO::create($sysFileCateDO);
    }

    public function deleteSysFileCate(int $id)
    {
        $model = new SysFileCateDO();
        $this->validSysFileCateExist($id);
        $model->startTrans();
        try {
            // 将该文件分类下文件类型更换为未分组
            $result = $model::destroy(['id' => $id], true);
            if ($result > 0) {
                $model->commit();
                return SysFileDO::update(['cid' => 0], ['cid' => $id]);
            } else {
                return -1;
            }
        } catch (\Exception $e) {
            $model->rollback();
            throw new OtherException($e->getMessage());
        }
    }

    public function updateSysFileCate(array $sysFileCateDO)
    {
        $this->validSysFileCateExist($sysFileCateDO['id']);
        return SysFileCateDO::update($sysFileCateDO);
    }

    public function getSysFileCate(int $id)
    {
        $this->validSysFileCateExist($id);
        return SysFileCateDO::find($id);
    }

    private function validSysFileCateExist(int $id)
    {
        $exist = SysFileCateDO::find($id);
        if (!$exist) {
            throw new OtherException('文件分类不存在');
        }
    }
}